<template>
    <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="getTitle" @ok="handleSubmit" :width="700">
        <BasicForm @register="registerForm" />
    </BasicModal>
</template>
<script lang="ts" setup>
    import { ref, computed, unref } from 'vue';
    import { useI18n } from '/@/hooks/web/useI18n'
    import { BasicModal, useModalInner } from '/@/components/Modal';
    import { BasicForm, useForm } from '/@/components/Form';
    import { formSchema } from './supplierType.data';
    import { saveOrUpdate } from './supplierType.api';
    // 获取emit
    const emit = defineEmits(['register', 'success']);
    const { t } = useI18n()
    const isUpdate = ref(true);
    const expandedRowKeys = ref([]);
    const treeData = ref([]);
    const isSubAdd = ref(false);
    //设置标题
    const getTitle = computed(() => (!unref(isUpdate) ? t('action.create'): t('action.edit')));
    //表单配置
    const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
        schemas: formSchema,
        showActionButtonGroup: false,
        labelCol: {
            xs: { span: 24 },
            sm: { span: 4 },
        },
        wrapperCol: {
            xs: { span: 24 },
            sm: { span: 18 },
        },
    });
    //表单赋值
    const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
        //重置表单
        await resetFields();
        expandedRowKeys.value = [];
        setModalProps({ confirmLoading: false });
        isUpdate.value = !!data?.isUpdate;
        isSubAdd.value = !data?.isUpdate && data.record && data.record.id;
        if (data?.record) {
            //表单赋值
            await setFieldsValue({
                ...data.record,
            });
        }
    });


    /**
     * 根据pid获取展开的节点
     * @param pid
     * @param arr
     */
    function getExpandKeysByParentId(parentId, arr) {
        if (parentId && arr && arr.length > 0) {
            for (let i = 0; i < arr.length; i++) {
                if (arr[i].key == parentId && unref(expandedRowKeys).indexOf(parentId) < 0) {
                    expandedRowKeys.value.push(arr[i].key);
                    getExpandKeysByPid(arr[i]['parentId'], unref(treeData));
                } else {
                    getExpandKeysByPid(parentId, arr[i].children);
                }
            }
        }
    }
    //表单提交事件
    async function handleSubmit() {
        try {
            let values = await validate();
            setModalProps({ confirmLoading: true });
            //提交表单
            await saveOrUpdate(values, isUpdate.value);
            //关闭弹窗
            closeModal();
            //展开的节点信息
            await getExpandKeysByParentId(values['parentId'], unref(treeData));
            //刷新列表(isUpdate:是否编辑;values:表单信息;expandedArr:展开的节点信息)
            emit('success', { isUpdate: unref(isUpdate), isSubAdd: unref(isSubAdd), values: { ...values }, expandedArr: unref(expandedRowKeys).reverse() });
        } finally {
            setModalProps({ confirmLoading: false });
        }
    }
</script>

